home *** CD-ROM | disk | FTP | other *** search
-
- ;BSET.ASM
- ;BZERO.ASM
- ;
- ; Uses longword operations if data is aligned on a longword boundry
- ; and the size is a mulitple of 4. Otherwise, uses byte operations.
-
- xdef _bset
- xdef _bzero
-
- _bzero
- clr.lD1
- brabegin
- _bset
- move.b15(A7),D1;12(A7)-> msb . . lsb(D1 = data)
- begin
- move.l4(A7),A0;A0 = address
- move.l8(A7),D0;D0 = byte count
- andi.b#3,11(A7);byte count on long word boundry?
- bnedrop
- andi.b#3,7(A7);address on longword boundry?
- bnedrop
- bralwb
- loopmove.bD1,(A0)+;BYTE SET LOOP
- dropdbf.wD0,loop ;remember, only effects lower word
- sub.l#$10000,D0;for buffers >65535
- bplloop;branch to loop because D0.W now is FFFF
- rts
-
- lwblsr.l#2,D0;byte count / 4 (longword chunks)
- tst.lD1;BZERO
- beqdropl
- move.bD1,14(A7);15(A7) already contains the byte
- move.w14(A7),D1;D1 0..15 set
- swapD1
- move.w14(A7),D1;D1 16..31 set
- bradropl
-
- looplmove.lD1,(A0)+;BYTE SET LOOP
- dropldbf.wD0,loopl;remember, only effects lower word
- sub.l#$10000,D0;for buffers >65535
- bplloopl;branch to loop because D0.W now is FFFF
- rts
-
-
-
-